import {
  Controller,
  Get,
  Post,
  Body,
  Patch,
  Param,
  Delete,
  Query,
  UseGuards,
  Request,
} from '@nestjs/common';
import { ToolsService } from './tools.service';
import { CreateToolDto } from './dto/create-tool.dto';
import { UpdateToolDto } from './dto/update-tool.dto';
import { QueryToolsDto } from './dto/query-tools.dto';
import { JwtAuthGuard } from '../auth/guards/jwt-auth.guard';
import { Roles } from '../../common/decorators/roles.decorator';
import { Role } from '../../common/decorators/roles.decorator';
import { RolesGuard } from '../../common/guards/roles.guard';

@Controller('tools')
export class ToolsController {
  constructor(private readonly toolsService: ToolsService) {}

  /**
   * 创建工具（仅管理员）
   */
  @Post()
  @Roles(Role.ADMIN, Role.SUPER_ADMIN, Role.EDITOR)
  @UseGuards(JwtAuthGuard, RolesGuard)
  create(@Body() createToolDto: CreateToolDto) {
    return this.toolsService.create(createToolDto);
  }

  /**
   * 查询工具列表（公开）
   */
  @Get()
  findAll(@Query() query: QueryToolsDto) {
    return this.toolsService.findAll(query);
  }

  /**
   * 获取热门工具（公开）
   */
  @Get('popular')
  getPopular(@Query('limit') limit?: number) {
    return this.toolsService.getPopular(limit);
  }

  /**
   * 获取特色工具（公开）
   */
  @Get('featured')
  getFeatured(@Query('limit') limit?: number) {
    return this.toolsService.getFeatured(limit);
  }

  /**
   * 获取推广工具（公开）
   */
  @Get('sponsored')
  getSponsored(@Query('limit') limit?: number) {
    return this.toolsService.getSponsored(limit);
  }

  /**
   * 获取相关工具推荐（公开）
   */
  @Get(':id/related')
  getRelatedTools(@Param('id') id: string, @Query('limit') limit?: number) {
    return this.toolsService.getRelatedTools(+id, limit);
  }

  /**
   * 查询单个工具（公开）
   */
  @Get(':idOrSlug')
  findOne(@Param('idOrSlug') idOrSlug: string) {
    // 判断是ID还是slug
    if (/^\d+$/.test(idOrSlug)) {
      return this.toolsService.findOne(+idOrSlug);
    } else {
      return this.toolsService.findBySlug(idOrSlug);
    }
  }

  /**
   * 更新工具（仅管理员）
   */
  @Patch(':id')
  @Roles(Role.ADMIN, Role.SUPER_ADMIN, Role.EDITOR)
  @UseGuards(JwtAuthGuard, RolesGuard)
  update(@Param('id') id: string, @Body() updateToolDto: UpdateToolDto) {
    return this.toolsService.update(+id, updateToolDto);
  }

  /**
   * 删除工具（仅管理员）
   */
  @Delete(':id')
  @Roles(Role.ADMIN, Role.SUPER_ADMIN)
  @UseGuards(JwtAuthGuard, RolesGuard)
  remove(@Param('id') id: string) {
    return this.toolsService.remove(+id);
  }

  /**
   * 点赞工具（需要登录）
   */
  @Post(':id/upvote')
  @UseGuards(JwtAuthGuard)
  upvote(@Param('id') id: string) {
    return this.toolsService.incrementUpvotes(+id);
  }
}

